#include <CtrlLib/CtrlLib.h>

using namespace Upp;

#include "Dialogs.h"

extern PostgreSQLSession pg_session;

ConfigurarPadronDlg::ConfigurarPadronDlg(int tipo_socio_)
{
	CtrlLayoutCancel(*this, "Configurar Listado de Padrones");
	Sizeable().Zoomable();
	Maximize(true);
	Icon(CentroJyPImg::icono_min32x32(),CentroJyPImg::icono());
	cancel.SetImage(CentroJyPImg::cancelar());
	imprimir_btn.SetImage(CentroJyPImg::editInfo());
	orden_asc.SetImage(CentroJyPImg::sort_ascending16x16());
	orden_desc.SetImage(CentroJyPImg::sort_descending16x16());
	
	orden_por.Add("- Seleccione -").Add("Documento").Add("Apellido/s").Add("Nombre/s");
	orden_por.SetIndex(0);
	orden_asc.Disable();
	orden_desc.Disable();
	
	lista_afiliados.SetSession(pg_session);
	lista_afiliados.SetTable(AFILIADO,NRO_SOCIO_A);
	
	int i;
	i = lista_afiliados.AddColumn(NRO_SOCIO_A,"Nro. Socio").NoEdit().HeaderTab().GetIndex();
	lista_afiliados.HeaderObject().ShowTab(i,true);
	
	i = lista_afiliados.AddColumn(APELLIDOS_A,"Apellido/s y Nombres/s").NoEdit().HeaderTab().GetIndex();
	lista_afiliados.HeaderObject().ShowTab(i,true);
	
//	i = lista_afiliados.AddColumn(NOMBRES_A,"Nombre/s").NoEdit().HeaderTab().GetIndex();
//	lista_afiliados.HeaderObject().ShowTab(i,true);
	
	i = lista_afiliados.AddColumn(TIPO_DOC_A,"Tipo Doc.").NoEdit().HeaderTab().GetIndex();
	lista_afiliados.HeaderObject().ShowTab(i,true);
	
	i = lista_afiliados.AddColumn(DNI_A,"Documento").NoEdit().HeaderTab().GetIndex();
	lista_afiliados.HeaderObject().ShowTab(i,true);
	
	i = lista_afiliados.AddColumn(FECHA_NAC_A,"Fecha Nac.").NoEdit().HeaderTab().GetIndex();
	lista_afiliados.HeaderObject().ShowTab(i,true);
	
	i = lista_afiliados.AddColumn(CALLE_A,"Calle").NoEdit().HeaderTab().GetIndex();
	lista_afiliados.HeaderObject().ShowTab(i,true);
	
	i = lista_afiliados.AddColumn(NRO_CALLE_A,"Nro.").NoEdit().HeaderTab().GetIndex();
	lista_afiliados.HeaderObject().ShowTab(i,true);
	
	i = lista_afiliados.AddColumn(PISO_A,"Piso").NoEdit().HeaderTab().GetIndex();
	lista_afiliados.HeaderObject().ShowTab(i,false);
	
	i = lista_afiliados.AddColumn(DPTO_A,"Dpto.").NoEdit().HeaderTab().GetIndex();
	lista_afiliados.HeaderObject().ShowTab(i,false);
	
	i = lista_afiliados.AddColumn(BARRIO_A,"Barrio").NoEdit().HeaderTab().GetIndex();
	lista_afiliados.HeaderObject().ShowTab(i,false);
	
	i = lista_afiliados.AddColumn(CIUDAD_A,"Ciudad").NoEdit().HeaderTab().GetIndex();
	lista_afiliados.HeaderObject().ShowTab(i,false);
	
	i = lista_afiliados.AddColumn(TEL_A,"Tel.").NoEdit().HeaderTab().GetIndex();
	lista_afiliados.HeaderObject().ShowTab(i,true);
	
	i = lista_afiliados.AddColumn(TEL_ALT_A,"Tel. Alt.").NoEdit().HeaderTab().GetIndex();
	lista_afiliados.HeaderObject().ShowTab(i,false);
	
	i = lista_afiliados.AddColumn(MAIL_A,"E-Mail").NoEdit().HeaderTab().GetIndex();
	lista_afiliados.HeaderObject().ShowTab(i,false);
	
	i = lista_afiliados.AddColumn(LEY_A,"Ley").NoEdit().HeaderTab().GetIndex();
	lista_afiliados.HeaderObject().ShowTab(i,false);
	
	i = lista_afiliados.AddColumn(NRO_AFILIADO_A,"Nro. Afiliado").NoEdit().HeaderTab().GetIndex();
	lista_afiliados.HeaderObject().ShowTab(i,false);
	
	i = lista_afiliados.AddColumn(CDGO_DTO_A,"Cód.Dcto.").NoEdit().HeaderTab().GetIndex();
	lista_afiliados.HeaderObject().ShowTab(i,false);
	
	i = lista_afiliados.AddColumn(CUOTA_A,"Cuota").NoEdit().HeaderTab().GetIndex();
	lista_afiliados.HeaderObject().ShowTab(i,false);
	
	i = lista_afiliados.AddColumn(REPARTICION_A,"Reparticion").NoEdit().HeaderTab().GetIndex();
	lista_afiliados.HeaderObject().ShowTab(i,false);
	
	i = lista_afiliados.AddColumn(CARGO_A,"Cargo").NoEdit().HeaderTab().GetIndex();
	lista_afiliados.HeaderObject().ShowTab(i,false);
	
	i = lista_afiliados.AddColumn(CATERORIA_A,"Categoria").NoEdit().HeaderTab().GetIndex();
	lista_afiliados.HeaderObject().ShowTab(i,false);
	
	i = lista_afiliados.AddColumn(OBSERVACIONES_A,"Observaciones").NoEdit().HeaderTab().GetIndex();
	lista_afiliados.HeaderObject().ShowTab(i,false);

	lista_afiliados.SetOrderBy(NRO_SOCIO_A);
	lista_afiliados.Query(TIPO_SOCIO_A == tipo_socio_);
	lista_afiliados.WhenBar = THISBACK(ImpresionMenu);
	
	orden_por <<= THISBACK(HabilitarOrdenamiento);
	orden_asc <<= THISBACK(OrdenAscendente);
	orden_desc <<= THISBACK(OrdenDescendente);
	imprimir_btn <<= THISBACK(GenerarReporte);
}

void ConfigurarPadronDlg::HabilitarOrdenamiento()
{
	orden_asc.Enable(orden_por.GetIndex() > 0);
	orden_desc.Enable(orden_por.GetIndex() > 0);
}

/**
 Realiza el ordenamiento de manera ascendente, eligiendo el campo previamente
 seleccionado en a lista de campos que se desean ordenar.
*/
void ConfigurarPadronDlg::OrdenAscendente()
{
	switch (orden_por.GetIndex()) {
		case 1:
			lista_afiliados.SetOrderBy(DNI_A);
		break;
		case 2:
			lista_afiliados.SetOrderBy(APELLIDOS_A);
		break;
//		case 3:
//			lista_afiliados.SetOrderBy(NOMBRES_A);
//		break;
	}
	lista_afiliados.ReQuery();
}

void ConfigurarPadronDlg::OrdenDescendente()
{
	switch (orden_por.GetIndex()) {
		case 1:
			lista_afiliados.SetOrderBy(Descending(DNI_A));
		break;
		case 2:
			lista_afiliados.SetOrderBy(Descending(APELLIDOS_A));
		break;
//		case 3:
//			lista_afiliados.SetOrderBy(Descending(NOMBRES_A));
//		break;
	}
	
	lista_afiliados.ReQuery();
}

void ConfigurarPadronDlg::GenerarReporte()
{
	EditorFormularioSolicitud editor_formulario;
	
	String qtf = "[/R*= Listado de Padrones&&{{";
	
	HeaderCtrl& headers = lista_afiliados.HeaderObject();
	
	int cant_visible = 0;
	for (int i = 0 ; i < headers.GetCount() ; i++) {
		if (headers.IsTabVisible(i))
			cant_visible = cant_visible + 1;
	}
	
	for (int i = 0 ; i < cant_visible ; i++) {
		qtf << "4";
		if (cant_visible > 1 && i < (cant_visible - 1))
			qtf << ":";
	}
	
	qtf << " ";
	
	for (int i = 0 ; i < headers.GetCount() ; i++) {
		if (headers.IsTabVisible(i)) {
			qtf << "[/0*C= " << headers[i].GetText() << "]";
			if (headers.GetCount() > 1 && (i < headers.GetCount() - 1))
				qtf << ":: ";
		}
	}
	
	for (int i = 0 ; i < lista_afiliados.GetCount() ; i++) {
		for (int j = 0 ; j < headers.GetCount() ; j++) {
			if (headers.IsTabVisible(j))
				qtf << "[/0*C " << AsString(lista_afiliados.GetColumn(i,j)) << "]:: ";
		}
	}
	
	qtf << "}}&&[/>*C Cantidad: " << AsString(lista_afiliados.GetCount()) << "]]";
	editor_formulario.editor.SetQTF(qtf);
	editor_formulario.Execute();
}

void ConfigurarPadronDlg::ImpresionMenu(Bar& bar)
{
	HeaderCtrl& headers = lista_afiliados.HeaderObject();
	for (int i = 0 ; i < headers.GetCount() ; i++) {
		bool visible = headers.IsTabVisible(i);
		bar.Add(headers[i].GetText(), THISBACK2(MostrarColumna, i, !visible)).Check(visible);
	}
}

void ConfigurarPadronDlg::MostrarColumna(int index, bool visible)
{
	lista_afiliados.HeaderObject().ShowTab(index,visible);
}